10 Pasos para Crear un Mapa Interactivo con Ventas por Internet en el Sector Comercio del Ecuador

Notas para Carol: 1. En la introducción podemos poner el mapa interactivo en forma de gif, donde le grabas unos cuantos pasos sobre el mapa o las barras para que se muestre la interactividad 2. En el inicio podemos poner los hex de las librerias {ggriaph} y {patchwork}

1. Introducción a la Visualización de Datos Interactiva Aprende a crear visualizaciones interactivas usando R con datos del módulo TICS de la ENESEM (INEC). Analizaremos las ventas por internet en el sector comercio para el año 2021.

2. Importación de Librerías Necesarias

library(tidyverse)
── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
✔ dplyr     1.1.2     ✔ readr     2.1.4
✔ forcats   1.0.0     ✔ stringr   1.5.0
✔ ggplot2   3.5.0     ✔ tibble    3.2.1
✔ lubridate 1.9.2     ✔ tidyr     1.3.0
✔ purrr     1.0.2     
── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
✖ dplyr::filter() masks stats::filter()
✖ dplyr::lag()    masks stats::lag()
ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
library(ggiraph)
library(sf)
Linking to GEOS 3.11.2, GDAL 3.6.2, PROJ 9.2.0; sf_use_s2() is TRUE
library(survey)
Loading required package: grid
Loading required package: Matrix

Attaching package: 'Matrix'

The following objects are masked from 'package:tidyr':

    expand, pack, unpack

Loading required package: survival

Attaching package: 'survey'

The following object is masked from 'package:graphics':

    dotchart
library(srvyr)

Attaching package: 'srvyr'

The following object is masked from 'package:stats':

    filter
library(patchwork)
library(scales)

Attaching package: 'scales'

The following object is masked from 'package:purrr':

    discard

The following object is masked from 'package:readr':

    col_factor

Estas librerías son fundamentales para manejar datos, crear gráficos y diseñar la interactividad.

3. Cargar los Datos y Diccionarios

# Base de datos del módulo TICS de la ENESEM (INEC)
datos <- read_delim("modulo_tics_indicador.txt",delim = "\t")
Rows: 15249 Columns: 106
── Column specification ────────────────────────────────────────────────────────
Delimiter: "\t"
chr (72): provincia, cod_letra, des_letra, des_sector, des_tamano, k, tic2_2...
dbl (34): id_empresa, cod_sector, cod_tamano, cod_sector_tic, cod_tamano_tic...

ℹ Use `spec()` to retrieve the full column specification for this data.
ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
# Códigos de provincia
diccionario <- read_rds("provincias.rds")

Estos datos provienen de la Encuesta Empresarial Estructural del INEC, Ecuador.

4. Configurar el Diseño Muestral

# Diseño muestral
tabla_svy <- as_survey_design(.data = datos,
                              ids = id_empresa,
                              probs = f_exp)

Esto permite trabajar con datos de encuestas de manera robusta.

5. Cargar los Shapes de Provincia

# Shapes de provincia
prov <- read_rds('provincias_corregidas.rds')

Los shapes son tomados de la cartografía del Instituto Geofísico Militar del Ecuador (IGM).

6. Resumen de Ventas por Internet en el Comercio

tabla_provincia <- tabla_svy %>% 
  filter(anio_fiscal == 2021,
         des_sector == "Comercio") %>%
  mutate(ventas = tic3_1_1_ventas_x_internet) %>% 
  group_by(provincia) %>%
  summarise(promedio = survey_mean(ventas, na.rm = TRUE),
            n = survey_total( na.rm = TRUE)) %>%
  left_join(diccionario)
Joining with `by = join_by(provincia)`

Este resumen muestra las ventas por internet desglosadas por provincia.

7. Crear Etiquetas para el Mapa Interactivo

datos_ratio <- left_join(prov,
                         tabla_provincia, by = c("DPA_PROVIN" = "provincia")) %>% 
  mutate(tooltip = paste0("Provincia: ", DPA_DESPRO, "<br>",
                          "Porcentaje: ", scales::percent(round(promedio,2)/100), "<br>",
                          "Empresas: " , round(n,0)), label = NA_character_)

Las etiquetas proporcionan información detallada cuando se pasa el mouse sobre el mapa.

8. Crear el Mapa Interactivo

plot <- ggplot(data = datos_ratio) +
  geom_sf_interactive(
    aes(fill = promedio,tooltip = tooltip,data_id = DPA_DESPRO),
    data = datos_ratio,
    color = 'gray',
    size = 0.3
  ) +
  guides(fill = guide_colorbar(title = "Ventas por internet")) +
  scale_fill_viridis_c(option = "rocket") +
  labs(title = "Promedio por Año, por Provincia y por Sector") +
  theme_minimal()

El mapa muestra las ventas por internet en cada provincia. Fijate en el argumento data_id esto nos permite identificar cada provincia.

9. Crear el Gráfico de Barras Interactivo

plot2 <- datos_ratio %>% 
  mutate(DPA_DESPRO1 = factor(DPA_DESPRO, levels = unique(DPA_DESPRO)),
         DPA_DESPRO1 = fct_reorder(DPA_DESPRO1, promedio)) %>%
  ggplot() +
  geom_bar_interactive(
    aes(x = DPA_DESPRO1, y = promedio, fill = DPA_DESPRO1, tooltip = tooltip,data_id = DPA_DESPRO),
    stat = "identity",
    color = 'gray',
    size = 0.3
  ) +
  guides(fill = guide_colorbar(title = "Promedio")) +
  scale_fill_viridis_d(option = "rocket") +
  theme_void()
Warning: There was 1 warning in `stopifnot()`.
ℹ In argument: `DPA_DESPRO1 = fct_reorder(DPA_DESPRO1, promedio)`.
Caused by warning:
! `fct_reorder()` removing 2 missing values.
ℹ Use `.na_rm = TRUE` to silence this message.
ℹ Use `.na_rm = FALSE` to preserve NAs.

El gráfico de barras complementa el mapa, proporcionando una vista alternativa. Recuerda data_id para identificar cada provincia.

10. Unir Mapa y Gráfico en una Visualización Interactiva

p <- plot + plot_spacer() + plot2 +
  plot_layout(widths = c(0.6, 0.1, 0.45)) &
  theme(legend.position = "none")

girafe(
  ggobj = p,
  options = list(
    opts_hover(css = ""),
    opts_hover_inv(css = "opacity:0.1;"),
    opts_sizing(rescale = FALSE)
  ),
  height_svg = 8,
  width_svg = 13
)
Warning: `guide_colourbar()` needs continuous scales.
Warning: Removed 2 rows containing missing values or values outside the scale range
(`geom_interactive_bar()`).

Esta animación interactiva permite que al pasar el mouse sobre el mapa se active la barra correspondiente y viceversa.

Importancia del Internet en el Comercio El internet es crucial para el comercio moderno, permitiendo a las empresas llegar a más clientes y optimizar sus ventas. Este tipo de visualización ayuda a entender mejor el impacto del comercio electrónico en diferentes regiones, facilitando la toma de decisiones basadas en datos.